/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package trabalhoconclusaocurso;

import java.util.Random;

/**
 *
 * @author matheus
 */
public class ComputeRegraDecisao {

   private int percuso;
    private int j;

    public void ComputeRegraDecisao(int unidadeFormiga, int vagavetor, Formiga formiga[], double inf[][]){
        //declaração de variaveis
            
            double info[][] = inf;
            double soma_probabilidades = 0;
            j = 0;//porque zerar o j na parte de cima nao funciona

        try{
          //retorna o percuso da formiga
            int[] percursoget = formiga[unidadeFormiga].getPercuso();
            //vetor de cidades visitadas.
            boolean visitado[] = formiga[unidadeFormiga].getCidadeVisitada();
            //pega o primeiro percuso da formiga k
            this.percuso = percursoget[vagavetor - 1];
            //System.out.println("percuso"+"= "+this.percuso);
            //criou um vetor de seleçao de probabilidades
            double selecaodeprobabilidade[] = new double[formiga.length];

            for(int unidadeCidade = 0; unidadeCidade < formiga.length; unidadeCidade++ ){

                 if(visitado[unidadeCidade] == true){//ja verifica se a cidade foi visitada
                    selecaodeprobabilidade[unidadeCidade] = 0;
                    }
                 else{
                     selecaodeprobabilidade[unidadeCidade] = infoHeuristica(this.percuso, unidadeCidade, info);
                     soma_probabilidades = soma_probabilidades + selecaodeprobabilidade[unidadeCidade];
                   }
            } //roleta

            roleta(formiga, vagavetor, soma_probabilidades, selecaodeprobabilidade, unidadeFormiga);

           
      }catch(Exception e){
          System.out.println("erro ComputeRegraDecisao");
      }

    }
    private double infoHeuristica(int unidade_percurso, int cidade_nao_visitada,  double inf[][]){
        double a = 0;
        try{
             a = inf[unidade_percurso][cidade_nao_visitada];
        } catch (Exception e) {
                System.out.println("erro infoHeuristica");
        }
          
        return a;

    }
    public void roleta(Formiga[] formiga, int passo, double soma_probabilidades, double selecaodeprobabilidades[], int unidadeFormiga ){//verificar com o professor
        //declarando objeto
        
          double r = Math.random()*soma_probabilidades;          
          double p = selecaodeprobabilidades[j];
          boolean[] visitadas;
          visitadas = formiga[unidadeFormiga].getCidadeVisitada();

        try{

            while(p < r){
                  j = j + 1;
                  p = p + selecaodeprobabilidades[j];         
              }

             if(visitadas[j] == true ){//dando loop infinito, mesmo com as tabelas fixas??
                          j++;
                         roleta( formiga, passo, soma_probabilidades, selecaodeprobabilidades, unidadeFormiga);
                  }
           
              formiga[unidadeFormiga].setPercurso(passo,j);//pass-> vaga do vetor, j é a cidade
              formiga[unidadeFormiga].setCidadesVisitadas(j, true);

         
         
        }catch(Exception e){
            System.out.println("erro roleta");
        }   
         
    }


   }//fim classe

   



